package com.ingesoft.client;

import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.ListGridEditEvent;
import com.smartgwt.client.types.TitleOrientation;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.ButtonItem;
import com.smartgwt.client.widgets.form.fields.TextAreaItem;
import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.smartgwt.client.widgets.grid.events.CellDoubleClickEvent;
import com.smartgwt.client.widgets.grid.events.CellDoubleClickHandler;
import com.smartgwt.client.widgets.grid.events.CellSavedEvent;
import com.smartgwt.client.widgets.grid.events.CellSavedHandler;
import com.smartgwt.client.widgets.layout.HStack;
import com.smartgwt.client.widgets.layout.VStack;
import com.smartgwt.client.widgets.tab.Tab;

public class TabObjetivoEspecifico extends Tab {

	private ViewController controller;

	private ListGrid tableUnidades;
	private ListGridField fieldUnidades;


	private ListGrid tableObjTerminales;
	private ListGridField fieldObjTerminales;


	private ListGrid tableObjEspecificos;
	private ListGridField fieldObjEspecificos;


	private ButtonItem btnAsociar;

	private ButtonItem btnCrearEspecifico;
	private ButtonItem btnEdtarEspecifico;

	private Window winEspecifico;

	private TextAreaItem txtEspecifico;
	public TabObjetivoEspecifico(ViewController controller)
	{
		this.controller=controller;

		//Unidades
		fieldUnidades=new ListGridField("nombreUnidad", "Nombre de la Unidad", 635);
		fieldUnidades.setAlign(Alignment.CENTER);

		tableUnidades=new ListGrid();
		tableUnidades.setFields(fieldUnidades);
		tableUnidades.setFixedRecordHeights(false);
		tableUnidades.setWrapCells(true);
		tableUnidades.setWidth(650);
		tableUnidades.setHeight(175);
		tableUnidades.setTop(100);
		tableUnidades.setEditEvent(ListGridEditEvent.NONE);

		//Terminales
		fieldObjTerminales=new ListGridField("nombreTerminal", "Objetivo Terminal", 635);
		fieldObjTerminales.setAlign(Alignment.CENTER);

		tableObjTerminales=new ListGrid();
		tableObjTerminales.setFields(fieldObjTerminales);
		tableObjTerminales.setFixedRecordHeights(false);
		tableObjTerminales.setWrapCells(true);
		tableObjTerminales.setWidth(650);
		tableObjTerminales.setHeight(175);
		tableObjTerminales.setTop(100);
		tableObjTerminales.setEditEvent(ListGridEditEvent.NONE);

		//Especificos
		fieldObjEspecificos=new ListGridField("nombreEspecifico", "Objetivo Especifico", 572);
		fieldObjEspecificos.setAlign(Alignment.CENTER);

		tableObjEspecificos=new ListGrid();
		tableObjEspecificos.setFields(fieldObjEspecificos);
		tableObjEspecificos.setFixedRecordHeights(false);
		tableObjEspecificos.setWrapCells(true);
		tableObjEspecificos.setWidth(583);
		tableObjEspecificos.setHeight(175);
		tableObjEspecificos.setTop(100);
		tableObjEspecificos.setEditEvent(ListGridEditEvent.NONE);


		btnAsociar=new ButtonItem();
		btnAsociar.setTitle("Asociar");
		btnAsociar.setAlign(Alignment.CENTER);
		btnAsociar.setWidth(60);

		btnCrearEspecifico=new ButtonItem("Crear");
		btnCrearEspecifico.setWidth(60);

		DynamicForm form=new DynamicForm();
		form.setDefaultWidth(850);
		form.setFields(btnAsociar);
		form.setLayoutAlign(Alignment.CENTER);

		DynamicForm form1=new DynamicForm();
		form1.setDefaultWidth(60);
		form1.setFields(btnCrearEspecifico);
		form1.setLayoutAlign(Alignment.CENTER);

		VStack ordenForma=new VStack();
		ordenForma.setWidth(70);
		ordenForma.addMember(form);
		ordenForma.setDefaultLayoutAlign(Alignment.CENTER);
		ordenForma.setLayoutLeftMargin(5);
		ordenForma.setLayoutRightMargin(5);
		ordenForma.setLayoutTopMargin(1);

		HStack ordenTable=new HStack(3);
		ordenTable.setDefaultWidth(900);
		ordenTable.addMember(tableObjEspecificos);
		ordenTable.addMember(form1);
		ordenTable.setDefaultLayoutAlign(Alignment.CENTER);
		ordenTable.setLayoutRightMargin(5);
		ordenTable.setLayoutLeftMargin(111);


		VStack orden=new VStack(5);		

		orden.setDefaultWidth(900);
		orden.setDefaultHeight(600);
		orden.addMember(tableUnidades);
		orden.addMember(tableObjTerminales);
		orden.addMember(ordenTable);
		orden.addMember(ordenForma);
		orden.setDefaultLayoutAlign(Alignment.CENTER);
		orden.setLayoutRightMargin(100);
		orden.setLayoutTopMargin(20);
		orden.setLayoutLeftMargin(100);

		setTitle("Objetivo Especifico");

		setPane(orden);


		eventoBtnAsociar();
		crearFila();
		abrirVentanaEspecifico();
	}


	public void mostrarVentanaEspecifico(int filaNum)
	{
		winEspecifico=new Window();
		winEspecifico.setWidth(540);
		winEspecifico.setHeight(300);
		winEspecifico.setTitle("Objetivo Especifico");
		winEspecifico.centerInPage();
		winEspecifico.setShowMinimizeButton(false);
		winEspecifico.setIsModal(true);

		txtEspecifico=new TextAreaItem();
		txtEspecifico.setTitle("Contenido:");
		txtEspecifico.setTitleOrientation(TitleOrientation.TOP);
		txtEspecifico.setWidth(498);
		txtEspecifico.setHeight(200);

		btnEdtarEspecifico=new ButtonItem("especifico","Editar");
		String especifico=tableObjEspecificos.getSelectedRecord().getAttributeAsString("nombreEspecifico");
		txtEspecifico.setValue(especifico);

		DynamicForm formTxt=new DynamicForm();
		formTxt.setDefaultWidth(500);
		formTxt.setFields(txtEspecifico);

		DynamicForm formEditar=new DynamicForm();
		formEditar.setDefaultWidth(70);
		formEditar.setFields(btnEdtarEspecifico);

		HStack ordenFormas=new HStack();
		ordenFormas.addMember(formEditar);
		ordenFormas.setDefaultLayoutAlign(Alignment.CENTER);
		ordenFormas.setLayoutLeftMargin(200);
		ordenFormas.setLayoutRightMargin(5);
		ordenFormas.setLayoutTopMargin(4);

		VStack ordenVentana=new VStack(5);
		ordenVentana.addMember(formTxt);
		ordenVentana.addMember(ordenFormas);
		ordenVentana.setDefaultWidth(490);
		ordenVentana.setDefaultLayoutAlign(Alignment.CENTER);
		ordenVentana.setLayoutLeftMargin(5);
		ordenVentana.setLayoutRightMargin(5);
		ordenVentana.setLayoutTopMargin(5);

		winEspecifico.addItem(ordenVentana);
		winEspecifico.show();

		editarObjetivoEspec(filaNum);
	}

	public void crearFila()
	{

		btnCrearEspecifico.addClickHandler(new ClickHandler() {

			@Override
			public void onClick(ClickEvent event) {

				tableObjEspecificos.startEditingNew();
			}
		});

	}

	public void crearObjetivoEspec()
	{

		tableObjEspecificos.addCellSavedHandler(new CellSavedHandler() {

			@Override
			public void onCellSaved(CellSavedEvent event) {
				// TODO Invoco al metodo para agregar un nuevo objetivo especifico

			}
		});

	}

	public void editarObjetivoEspec(final int filaNum)
	{
        btnEdtarEspecifico.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				// TODO Invoco el metodo para editar un objetivo general
				String especifico=txtEspecifico.getDisplayValue();

				tableObjEspecificos.setEditValue(filaNum, "nombreEspecifico", especifico);
				tableObjEspecificos.startEditing();
			}
		});
	}

	public void abrirVentanaEspecifico()
	{

		tableObjEspecificos.addCellDoubleClickHandler(new CellDoubleClickHandler() {

			@Override
			public void onCellDoubleClick(CellDoubleClickEvent event) {
				
				mostrarVentanaEspecifico(event.getRowNum());
				
			}
		});

	}

	public void eventoBtnAsociar()
	{

		btnAsociar.addClickHandler(new ClickHandler() {

			@Override
			public void onClick(ClickEvent event) {
				// TODO Auto-generated method stub
				ListGridRecord recordUnidad=tableUnidades.getSelectedRecord();
				ListGridRecord recordEspecifico=tableObjEspecificos.getSelectedRecord();
				ListGridRecord recordTerminal=tableObjTerminales.getSelectedRecord();

				if(recordEspecifico!=null && recordTerminal!=null && recordUnidad!=null)
				{

				}
				else
				{
					SC.say("Debe Seleccionar un item de cada tabla.");
				}
			}
		});

	}

}
